筆記目錄

Skip to content

ASPNETCORE_ENVIRONMENT 失效的原因

TLDR

  • 當在 Windows 全域環境變數設定 ASPNETCORE_ENVIRONMENT 後,ASP.NET Core 應用程式可能無法立即讀取到新設定。
  • 僅重啟網站或應用程式池(Application Pool)無法更新 IIS 讀取的環境變數。
  • 必須執行 iisreset 指令強制重新啟動 IIS 服務,才能確保環境變數變更生效。

環境變數設定失效的問題情境

什麼情況下會遇到這個問題:在 Windows Server 環境下,透過系統全域設定修改 ASPNETCORE_ENVIRONMENT 環境變數,但應用程式仍持續讀取預設的 appsettings.json,而未切換至對應的 appsettings.{Environment}.json

在 IIS 託管的 ASP.NET Core 應用程式中,即便在作業系統層級正確設定了環境變數,IIS 的處理程序(w3wp.exe)往往因為快取機制或服務生命週期管理,無法即時偵測到系統環境變數的異動。此時,單純的「停止並啟動網站」或「回收應用程式池」皆無法強制 IIS 重新讀取作業系統的全域環境變數。

解決方案與驗證

什麼情況下需要執行此動作:當確認環境變數已正確寫入系統設定,但應用程式行為未發生預期改變時。

若要使變更生效,必須強制重啟 IIS 服務。請以系統管理員權限開啟命令提示字元(CMD)或 PowerShell,並執行以下指令:

bash
iisreset /restart

TIP

執行 iisreset 指令會中斷伺服器上所有託管的網站服務,請務必在維護時間或確認對業務影響後執行。

執行完成後,IIS 將會重新載入所有環境變數,應用程式即可正確讀取到設定的 ASPNETCORE_ENVIRONMENT 值。

異動歷程

  • 2024-09-19 初版文件建立。